package com.qezhhnjy.huawei.topic2;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
 * @author qezhhnjy
 * @date 2021/6/20-22:42
 * 原理：ip地址的每段可以看成是一个0-255的整数，把每段拆分成一个二进制形式组合起来，然后把这个二进制数转变成
 * 一个长整数。
 * 举例：一个ip地址为10.0.3.193
 * 每段数字             相对应的二进制数
 * 10                   00001010
 * 0                    00000000
 * 3                    00000011
 * 193                  11000001
 * <p>
 * 组合起来即为：00001010 00000000 00000011 11000001,转换为10进制数就是：167773121，即该IP地址转换后的数字就是它了。
 * 本题含有多组输入用例，每组用例需要你将一个ip地址转换为整数、将一个整数转换为ip地址。
 * 输入描述：
 * 输入
 * 1 输入IP地址
 * 2 输入10进制型的IP地址
 * <p>
 * 输出描述：
 * 输出
 * 1 输出转换成10进制的IP地址
 * 2 输出转换后的IP地址
 * <p>
 * 输入：
 * 10.0.3.193
 * 167969729
 * 输出：
 * 167773121
 * 10.3.3.193
 */
public class Topic32 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 由于这里整形数字是一个无符号的数据，在java中int处理会越界，需要用long来处理。
        while (in.hasNext()) {
            String line = in.nextLine();
            long result = 0;
            String[] split = line.split("\\.");
            for (int i = 0, splitLength = split.length; i < splitLength; i++) {
                String s = split[i];
                result += Long.parseLong(s) << (24 - i * 8);
            }
            long line2 = Long.parseLong(in.nextLine());
            List<Long> list = new ArrayList<>();
            list.add((line2 & 0xFF000000) >>> 24);
            list.add((line2 & 0x00FF0000) >>> 16);
            list.add((line2 & 0x0000FF00) >>> 8);
            list.add(line2 & 0x000000FF);
            String result2 = list.stream().map(String::valueOf).collect(Collectors.joining("."));
            System.out.println(result);
            System.out.println(result2);
        }
    }
}
